//
// Description: 907. 区间覆盖
// Created by Loading on 2022/6/5.
//

#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

/* 贪心 */
int main() {
    vector<PII> vec;

    int s, t;
    cin >> s >> t;
    int n;
    cin >> n;
    for (int i = 0; i < n; ++i) {
        int l, r;
        cin >> l >> r;
        vec.emplace_back(l, r);
    }

    // 按左端点排序
    sort(vec.begin(), vec.end());

    int res = 0;
    // 已覆盖的点
    int end;
    for (int i = 0; i < n;) {
        // 在所有覆盖 s 的区间中选择一个右端点最大的
        end = INT_MIN;
        int j = i;
        while (j < n && vec[j].first <= s) {
            end = max(end, vec[j].second);
            ++j;
        }
        // 区间中没有找到覆盖 s 的，无法覆盖
        if (end == INT_MIN) {
            res = -1;
            break;
        }
        ++res;
        // 已完全覆盖
        if (end >= t) {
            break;
        }
        // end 之前的区间已完全覆盖，更新 s
        s = end;
        // 更新迭代器
        i = j;
    }
    // 无法覆盖右端点
    if (end < t) {
        res = -1;
    }

    cout << res << endl;

    return 0;
}